#ifndef _WS2812_APP_H
#define _WS2812_APP_H

#include "sys.h"
#include "stm32f4xx_hal.h"
#include <stdlib.h>
#include "ws2812_bsp.h"
#include "ws2812_driver.h"

// 简单灯效类型
typedef enum {
    EFFECT_SOLID_COLOR,    // 纯色常亮
    EFFECT_MARQUEE,        // 跑马灯效果
    EFFECT_BREATHING,      // 呼吸灯效果
    EFFECT_RAINBOW,         // 彩虹渐变效果
    EFFECT_COMET,          // 彗星拖尾效果
    EFFECT_FIRE,           // 火焰效果
    EFFECT_COLOR_WIPE,     // 颜色擦除效果
    EFFECT_STROBE,         // 频闪效果
    EFFECT_CIRCULAR_RAINBOW, // 环形彩虹
    EFFECT_PULSE_WAVE,     // 脉冲波浪
    EFFECT_BOUNCING_BALL,  // 弹跳球
    EFFECT_TWINKLE         // 星光闪烁
} LedEffectType;

// 灯效参数结构体
typedef struct {
    LedEffectType type;
    RGB_Color color;       // 主要颜色
    RGB_Color color2;      // 次要颜色（用于双色效果）
    uint16_t speed;        // 效果速度 (ms)
    uint8_t brightness;    // 亮度 (0-100)
    uint8_t size;          // 效果尺寸（如彗星长度）
    uint8_t intensity;     // 效果强度（如火焰强度）
} LedEffectParams;

// 灯效管理器
typedef struct {
    WS2812_RingHandle ring;
    LedEffectParams params;
    uint32_t last_update;
    uint16_t position;     // 用于动画位置
} LedEffectController;

// 初始化灯效控制器
void LED_Effect_Init(LedEffectController *ctrl, uint16_t led_count);

// 设置灯效参数
void LED_Effect_SetParams(LedEffectController *ctrl, LedEffectParams params);

// 更新灯效（需在循环中定期调用）
void LED_Effect_Update(LedEffectController *ctrl);

void ws2812_app_init(void);

extern LedEffectController led_controller;



#endif

